<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/javascript">
      /*
        函数 function
          - 函数也是一个对象
            JS中,除了基本数据类型,全都是对象
          - 函数中可以封装一些功能(代码),在需要时可以执行这些功能
          - 函数中可以保存一些可执行的代码在需要的时候调用
          - 使用typeof检查一个函数对象,会返回function
      */

      //我们在实际开发中很少使用构造函数来创建一个对象
      //方式一:创建一个函数对象
      //可以将要封装的代码以字符串的形式传递给构造函数
      var fun = new Function("console.log('Hello 这是我的第一个函数');");
      console.log(fun);
      console.log(typeof fun);

      // 封装到函数中的代码不会立即执行
      // 函数中的代码会在函数调用的时候执行
      // 调用函数语法: 函数对象()
      // 当调用函数时,函数中封装的代码会按照顺序执行
      fun();
      fun();
      fun();

      /*
          方式二:
            使用函数声明来创建一个函数(形参列表是可选的,写不写都行,不是强制固定的)
              语法:
                function 函数名([形参1,形参2...形参N]) {
                  语句...
                }
      */
      function fun2() {
        console.log('这是我的第二个函数~~~');
        alert('哈哈哈哈哈');
        document.write('~~~~~~O(∩_∩)O哈哈~~~~~~~~');
      }
      console.log(fun2);
      //调用fun2
      // fun2()

      /*
        方式三:匿名函数(和方式二没有太大的区别)
        使用函数表达式来创建一个函数
          var 函数名 = function([形参...]) {
            语句...
          }
      */
      var fun3 = function () {
        console.log('我是函数中封装的匿名函数');
      };

      fun3();
    </script>
  </head>

  <body></body>
</html>
